]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
authPrompt: Fix hang if user types password really fast
authorShivam Mishra <shivam.m@live.com>
Tue, 7 Apr 2015 19:53:42 +0000 (01:23 +0530)
committerRay Strode <rstrode@redhat.com>
Tue, 7 Apr 2015 20:02:21 +0000 (16:02 -0400)
It's possible for a user to type their password so quickly
that GDM hasn't even had time to ask for the password yet,
much less have time to process the answer.
In that situation, we tuck the user response away as
_preemptiveAnswer, and pass it along to GDM when GDM is finally
ready for it.
The problem is, there's a bug in the code, where we send
null for the service name in the answer, instead of the right
service name (say "gdm-password").
This commit addresses the bug by making sure we don't pass the
answer along, until the service name is properly set in
_queryingService. To ensure that, answering query (answerQuery)
based on _preemptiveAnswer has been shifted right below
this._queryingService = serviceName;

https://bugzilla.gnome.org/show_bug.cgi?id=737586

js/gdm/authPrompt.js

index b1233196ad11246b97efa882e9eddb1f6103dee6..d712ddce49e4a5f164ae81a44fdfc0ff27ad51a8 100644 (file)
@@ -194,17 +194,15 @@ const AuthPrompt = new Lang.Class({
     },
 
     _onAskQuestion: function(verifier, serviceName, question, passwordChar) {
-        if (this._preemptiveAnswer) {
-            if (this._queryingService)
-                this._userVerifier.answerQuery(this._queryingService, this._preemptiveAnswer);
-            this._preemptiveAnswer = null;
-            return;
-        }
-
         if (this._queryingService)
             this.clear();
 
         this._queryingService = serviceName;
+        if (this._preemptiveAnswer) {
+            this._userVerifier.answerQuery(this._queryingService, this._preemptiveAnswer);
+            this._preemptiveAnswer = null;
+            return;
+        }
         this.setPasswordChar(passwordChar);
         this.setQuestion(question);